﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using SISCON.Bl;
using SISCON.Vo;
using SISCON.Common;
using SISCON.Model;

namespace SISCON.Service
{
    /// <summary>
    /// Descripción breve de DepartmentServices
    /// </summary>
    [WebService(Namespace = "http://SISCON.mx/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class DepartmentServices : System.Web.Services.WebService
    {

        private DepartmentBL _DepartmentBL = new DepartmentBL();

        /// <summary>
        /// Manda a llamar al Bl GetAllDepartments
        /// </summary>
        /// <param name="sessionUUID">Sesion del sistema</param>
        /// <returns>Objeto de tipo ResultObject</returns>
        [WebMethod]
        [System.Xml.Serialization.XmlInclude(typeof(List<Department>))]
        public ResultObject GetAllDepartments(string sessionUUID)
        {
            try
            {
                return new ResultObject(_DepartmentBL.GetAllDepartments(sessionUUID), null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible obtener la lista de departamentos. Favor de intentar más tarde.");
            }
        }

        /// <summary>
        /// Manda a llamar al Bl GetDepartment
        /// </summary>
        /// <param name="sessionUUID"></param>
        /// <param name="departmentId"></param>
        /// <returns>Objeto de tipo ResultObject</returns>
        [WebMethod]
        [System.Xml.Serialization.XmlInclude(typeof(Department))]
        public ResultObject GetDepartment(string sessionUUID, string departmentId)
        {
            try
            {
                return new ResultObject(_DepartmentBL.GetDepartment(sessionUUID, departmentId), null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible obtener la lista de departamentos. Favor de intentar más tarde.");
            }
        }

        /// <summary>
        /// Manda a llamar al Bl SaveDepartment
        /// </summary>
        /// <param name="sessionUUID">Sesion del sistema</param>
        /// <param name="modifiedDepartmentId">Id interno del departamento</param>
        /// <param name="departmentName">Nombre del departamento</param>
        /// <param name="departmentCode">Clave del departamento</param>
        /// <returns>Objeto de tipo ResultObject</returns>
        [WebMethod]
        public ResultObject SaveDepartment(string sessionUUID, string modifiedDepartmentId, string departmentName, string departmentCode)
        {
            try
            {
                _DepartmentBL.SaveDepartment(sessionUUID, modifiedDepartmentId, departmentCode, departmentName);
                return new ResultObject("ok", null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible guardar los datos del usuario. Favor de intentar más tarde.");
            }
        }

        /// <summary>
        /// Manda a llamar al Bl DeleteDepartment
        /// </summary>
        /// <param name="sessionUUID">Sesion del sistema</param>
        /// <param name="departmentId">Id interno del departamento</param>
        /// <returns>Objeto del tipo ResultObject</returns>
        [WebMethod]
        public ResultObject DeleteDepartment(string sessionUUID, string departmentId)
        {
            try
            {
                _DepartmentBL.DeleteDepartment(sessionUUID, departmentId);
                return new ResultObject("ok", null);
            }
            catch (Exception ex)
            {
                return new ResultObject(null, ex is SISCONException ? ex.Message : "No fue posible eliminar el depertamento. Favor de intentar más tarde.");
            }
        }

    }
}
